package org.dromara.oce.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.oce.domain.OceMaterial;
import org.dromara.oce.domain.bo.OceMaterialBo;
import org.dromara.oce.domain.qo.OceMaterialQo;
import org.dromara.oce.domain.vo.OceMaterialVo;
import org.springframework.scheduling.annotation.Async;

import java.util.Collection;
import java.util.List;

/**
 * 素材Service接口
 *
 * @author dsbb
 * @date 2025-06-05
 */
public interface OceMaterialService extends IService<OceMaterial>{

    /**
     * 查询素材
     *
     * @param materialId 主键
     * @return 素材
     */
    OceMaterialVo queryById(Long materialId);

    /**
     * 分页查询素材列表
     *
     * @param qo        查询条件
     * @param pageQuery 分页参数
     * @return 素材分页列表
     */
    TableDataInfo<OceMaterialVo> queryPageList(OceMaterialQo qo, PageQuery pageQuery);

    /**
     * 查询符合条件的素材列表
     *
     * @param qo 查询条件
     * @return 素材列表
     */
    List<OceMaterialVo> queryList(OceMaterialQo qo);

    /**
     * 新增素材
     *
     * @param bo 素材
     * @return 是否新增成功
     */
    Boolean insertByBo(OceMaterialBo bo);

    /**
     * 修改素材
     *
     * @param bo 素材
     * @return 是否修改成功
     */
    Boolean updateByBo(OceMaterialBo bo);

    /**
     * 校验并批量删除素材信息
     *
     * @param ids     待删除的主键集合
     * @param isValid 是否进行有效性校验
     * @return 是否删除成功
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 同步广告主下面的素材到本地库
     * @param accountId
     * @param startTime
     * @param endTime
     */
    void syncMeterial(Long accountId,Long advertiserId,String startTime,String endTime);


    TableDataInfo<OceMaterialVo> queryPageListCost(OceMaterialQo qo, PageQuery pageQuery);
}
